package com.ztrue.framework.core.domain;

import com.ztrue.framework.core.event.IDomainEvent;

import java.io.Serializable;
import java.util.Iterator;
import java.util.List;

/**
 * @author zhangw
 * @date 2016/10/27 13:35
 * @version: 1.0
 */
public interface IAggregateRoot extends Serializable {
    /**
     * 获取统一ID
     *
     * @return
     */
    String getUniqueId();

    /**
     * 获取当前聚合根版本
     *
     * @return
     */
    Long getVersion();

    /**
     * 获取变更事件
     * @return
     */
    List<IDomainEvent> getChanges();

    /**
     * 接收变更
     *
     * @param newVersion
     */
    void acceptChanges(Long newVersion);

    /**
     * 事件回溯
     *
     * @param events
     */
    void replayEvents(Iterator<IDomainEvent> events);
}
